#pragma once
#include <iostream>

#define API_EXPORT __attribute__((visibility ("default")))

#ifdef __cplusplus
extern "C" {
#endif

namespace wml {

int add(int , int);

class IProfileClient {
    public:
    virtual void LogInfo() = 0;
};

class IPerson {
    public:
    virtual void run() = 0;
};

class ProfileClient: public IProfileClient {
    public:
    static ProfileClient & GetInstance();
    void LogInfo();

    private:
    ProfileClient() {};

};

class Person : public IPerson {
    public:
    Person(const std::string &&name, u_int8_t age);
    ~Person();
    void run();
    private:
    std::string _name;
    u_int8_t _age;
};

Person * createPerson(const std::string name, u_int8_t age);
void releasePerson(Person * );
ProfileClient * GetProfileClientInstance();

}

#ifdef __cplusplus
} 
#endif